package javaCode.chapter13.set_;

import java.util.HashSet;
import java.util.Set;

/**
 * @author 徐州城
 * @version 1.0
 */
public class HashSet01 {
    @SuppressWarnings("all")
    public static void main(String[] args) {

        HashSet hashSet = new HashSet();

        //说明
        //1. 在执行add方法后，会返回一个boolean值
        //2. 如果添加成功，返回 true，否则返回 false
        //3. 可以通过 remove 指定删除哪个对象
        System.out.println(hashSet.add("j")); //t
        System.out.println(hashSet.add("l")); //t
        System.out.println(hashSet.add("j")); //f
        System.out.println(hashSet.add("k")); //t
        System.out.println(hashSet.add("R")); //t
        hashSet.remove("j"); //t
        System.out.println("set=" + hashSet);

        //
        Set set = new HashSet();
        //4. HashSet 不能存放相同的元素/数据?
        set.add("lucy");
        set.add("lucy");
        set.add(new Dog("tom")); //因为它们不是同一个对象
        set.add(new Dog("tom")); //所以都能存入
        System.out.println("set=" + set);

        //在加深一下，非常经典的面试题
        //看源码，做分析，留一个坑，讲完源码就了然了
        //去看源码，即 add 到底发生了什么？ => 底层机制.
        set.add(new String("hsp")); //ok
        set.add(new String("hsp")); //加入不了
        System.out.println("set=" + set);
    }
}

class Dog { //定义Dog类
    private String name;

    public Dog(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Dog{" +
                "name='" + name + '\'' +
                '}';
    }

//    public boolean equals(Object obj){
//        if (this == obj){
//            return true;
//        }
//
//        if (obj instanceof Dog){
//
//        }
//    }
}
